import com.android.build.api.transform.*
import com.android.build.gradle.internal.pipeline.TransformManager

/**
 * author： suliang
 * 2022/10/21 9:50
 * describe :
 */
class NewTransform : Transform(){
    //transform的名称
//transformClassesWithMyClassTransformForDebug 运行时的名字
//transformClassesWith + getName() + For + Debug或Release
    override fun getName(): String {
        return "javassistTransform"
    }
    //需要处理的数据类型，有两种枚举类型
//CLASSES和RESOURCES，CLASSES代表处理的java的class文件，RESOURCES代表要处理java的资源
    override fun getInputTypes(): MutableSet<QualifiedContent.ContentType> {
        return TransformManager.CONTENT_CLASS
    }

    override fun getScopes(): MutableSet<in QualifiedContent.Scope> {
        return TransformManager.SCOPE_FULL_PROJECT;
    }

    override fun isIncremental(): Boolean {
        return false
    }

    override fun transform(
        context: Context?,
        inputs: MutableCollection<TransformInput>?,
        referencedInputs: MutableCollection<TransformInput>?,
        outputProvider: TransformOutputProvider?,
        isIncremental: Boolean
    ) {

        inputs?.forEach { input : TransformInput ->
            input.directoryInputs.forEach {

            }

        }

        super.transform(context, inputs, referencedInputs, outputProvider, isIncremental)
    }


}
//abstract class NewTransform : AsmClassVisitorFactory<InstrumentationParameters.None> {
//
//    override fun createClassVisitor(
//        classContext: ClassContext,
//        nextClassVisitor: ClassVisitor
//    ): ClassVisitor {
////        返回一个 ClassVisitor 对象，其内部实现了我们修改 class 文件的逻辑
//        return object : ClassVisitor(Opcodes.ASM5,nextClassVisitor){
//            val className = classContext.currentClassData.className
//
//            //修改方法，只重载了 visitMethod方法
//            override fun visitMethod(
//                access: Int,
//                name: String?,
//                descriptor: String?,
//                signature: String?,
//                exceptions: Array<out String>?
//            ): MethodVisitor {
//                val oldMethodVisitor = super.visitMethod(access, name, descriptor, signature, exceptions)
//                return OwnMethodVisitor(className,oldMethodVisitor,access,name,descriptor)
//            }
//        }
//    }
//
//    override fun isInstrumentable(classData: ClassData): Boolean {
//        return true
//    }
//
//}